import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
import { ManageModule } from './manage/manage.module';
import { MsgCodeModule } from './msg-code/msg-code.module';
import { ProvideTestModule } from './provide-test/provide-test.module';
import { GlobalModule } from './global/global.module';
import { TestModule } from './test/test.module';
import { ConfigModule } from './config/config.module';
import { MiddleWareTestModule } from './middle-ware-test/middle-ware-test.module';
import { UploadModule } from './modules/upload/upload.module'
import { RxjsTestModule } from './modules/rxjs-test/rxjs-test.module'
import { ReponseTestModule } from './modules/reponse-test/reponse-test.module'
import { GuardRoleModule } from './guard-role/guard-role.module';
import { PipeTestModule } from './pipe-test/pipe-test.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { SqlTestModule } from './modules/sql-test/sql-test.module'
import { SqlOTmModule } from './modules/sql-o-tm/sql-o-tm.module'
import { SqlMtmModule } from '@/modules/sql-mtm/sql-mtm.module'
@Module({
  // 导入模块的列表，如果需要使用其他模块的服务，需要通过这里导入
  imports: [
    // 连接数据库
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: '127.0.0.1',
      port: 3306,
      username: 'root',
      password: 'admin123',
      database: 'nest-demo', // 数据库名称也要是小写或者-、_连接
      // entities: [Book],
      entities: [__dirname + '/entity/**/*.entity{.ts,.js}'], //实体文件
      synchronize: true, //synchronize字段代表是否自动将实体类同步到数据库
      // retryDelay: 500, //重试连接数据库间隔
      retryAttempts: 5,//重试连接数据库的次数
      // autoLoadEntities: true, //如果为true,将自动加载实体 forFeature()方法注册的每个实体都将自动添加到配置对象的实体数组中

    }),
    SqlTestModule,
    SqlOTmModule,
    SqlMtmModule,
    ReponseTestModule, UploadModule, UserModule, ManageModule, MsgCodeModule, ProvideTestModule, GlobalModule, TestModule, RxjsTestModule, ConfigModule.forRoot({ path: 'api' }), MiddleWareTestModule, GuardRoleModule, PipeTestModule,



  ],
  // 处理http请求，包括路由控制，向客户端返回响应，将具体业务逻辑委托给providers处理
  controllers: [AppController,],
  // 注入器实例化的提供者（服务提供者），处理具体的业务逻辑，各个模块之间可以共享
  providers: [AppService],
})
export class AppModule { }
